#ifndef __BAYES_LOOP_H__
#define __BAYES_LOOP_H__

#include <vector>

class BayesLoop
{
private:
    // 假设集合，每一种假设对应一个概率
    std::vector<double> m_hyp;
    // 观察集合，每一种观察，都对应一个列表，其中 m_obs[i][j] 表示概率 P(i | j) ，即在假设 j 成立的条件下，观察 i 发生的概率
    std::vector<std::vector<double>> m_obs;

public:
    // 初始化贝叶斯循环器
    BayesLoop(const std::vector<double> &hyp, const std::vector<std::vector<double>> &obs) : m_hyp(hyp), m_obs(obs){};

    // 返回假设概率列表
    const std::vector<double> &get_hyp()
    {
        return m_hyp;
    }
    // 进行一次贝叶斯循环，即执行一次实验，obs_id 指的是实验观察得到的结果
    void do_loop(int obs_id);
};

#endif